【Study】PM2是什么

记录学习pm2的过程

目录

pm2是什么

特点

示例说明

配置文件

常用命令

背景

由于需要在容器云新增一个测试环境,改了代码相关的配置后,进行部署。发现服务一直启动不了。在和运维一起排查问题,他看到pm2的一些信息, 问我pm2是不是阻塞了,并不是很清楚pm2是什么。 就初步学习了一下,进行记录。

PM2是什么

Precess Manager 2

PM2是一个进程管理工具,维护一个进程列表,可以用来管理正在用行的进程,实时查看日志,性能监控等功能

特点

  • 日志管理 (已使用)
  • 支持监听重启
  • 支持部署工作流
  • 支持集群模式
  • 支持性能监控
  • 支持pm2 开发

示例说明

  1. 首先 npm init 新建一个node项目

  2. 全局安装pm2 (npm install pm2 -g), 如果已经安装过,则不需要再次操作

  3. 在这个项目里新建index.js, (创建一个http服务器)

  4. 执行命令 pm2 ecosystem, 默认会生成pm2的配置文件)( ecosystem.config.js)

  5. 在配置文件里进行关于应用的各种配置

    示例

配置文件

  1. 执行命令 pm2 ecosystem, 默认会生成 ecosystem.config.js (和package.json放在一个根目录下)

  2. 生成文件内容如下

    • apps 是一个数组, 每一项数组成员对应一个pm2中的应用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    module.exports = {
    apps : [
    {
    script: 'index.js',
    watch: '.'
    },
    {
    script: './service-worker/',
    watch: ['./service-worker']
    }
    ],

    deploy : {
    production : {
    user : 'SSH_USERNAME',
    host : 'SSH_HOSTMACHINE',
    ref : 'origin/master',
    repo : 'GIT_REPOSITORY',
    path : 'DESTINATION_PATH',
    'pre-deploy-local': '',
    'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
    'pre-setup': ''
    }
    }
    };
  1. 对配置文件详解
配置名 含义
apps json结构,是一个数组,里面每一项是一个pm2的应用
name 应用程序名称
cwd 应用程序所在目录
script 应用程序启动文件所在目录
exec_mode 应用启动模式,默认是fork, 可设置为 cluster集群
instances 应用启动实例个数,仅在cluster模式有效
max_memory_restart 最大内存限制数, 超出自动重启
log_date_format 日志文件格式
error_file 错误日志文件路径
out_file 正常日志文件路径
merge_logs 设置追加日志而不是新建日志
autorestart 是否自动重启, true/false
watch 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载
ignore_watch 不用监听的文件,例如node_modules
restart_delay 延时重启时间
env 生产环境变量
env_dev 开发环境变量
env_test 测试环境变量
min_uptime 如果应用程序在这个时间退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
max-restarts 异常时重启次数
  1. 示例app进行配置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    module.exports = {
    apps : [
    {
    name: 'xiaoyu_node_test', //名称
    script: 'index.js', //程序入口
    watch: '.', // 需要监控的目录
    error_file: '/home/logs/err.log', //错误日志文件
    out_file: '/home/logs/info.log', // 正常日志文件
    log_date_format: 'YYYY-MM-DD HH:mm:ss', // 指定日志文件的时间格式
    autorestart: true, // 发生异常是否自动重启, true重启, false不重启
    env: {
    NODE_ENV: 'production', //环境参数,当前指定为生产环境 process.env.NODE_ENV
    REMOTE_ADDR: '' // process.env.REMOTE_ADDR
    },
    env_dev: {
    NODE_ENV: 'development', //环境参数,当前指定为开发环境 pm2 start app.js --env_dev
    REMOTE_ADDR: '' // process.env.REMOTE_ADDR
    }

    },
    {
    script: './service-worker/',
    watch: ['./service-worker']
    }
    ],

    deploy : {
    production : {
    user : 'SSH_USERNAME',
    host : 'SSH_HOSTMACHINE',
    ref : 'origin/master',
    repo : 'GIT_REPOSITORY',
    path : 'DESTINATION_PATH',
    'pre-deploy-local': '',
    'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
    'pre-setup': ''
    }
    }
    };

常用命令

  1. 安装pm2

    1
    npm install pm2 -g           // 要进行全局安装
  1. 启动进程(应用)

    • 1.直接启动对应的js文件

      1
      pm2 start index.js
  • 2.启动pm2的配置文件

    1
    pm2 start ecosystem.config.js

    屏幕快照 2020-08-26 20.18.09.png

  1. 重启

    1
    pm2 restart ecosystem.config.js
  1. 查看日志

    1
    pm2 logs

    查看日志

  1. 查看进程 以及 查看进程详情

    1
    pm2 list
    1
    pm2 describe 4     //id号

    查看进程详情

  1. 查看cpu和内存资源占用等一些性能指标

    1
    pm2 monit

    屏幕快照 2020-08-26 20.17.37.png

    cpu和内存资源占用

  1. 停止进程

    1
    pm2 stop 0                // 0是id  id|name|namespace|all|json|stdin

    停止进程

    status 已经变成 stoped

  1. 删除进程

    1
    pm2 delete 0.        //id号

    上述的列表里就会删掉这一条

  1. 开机自启动

    • pm2 start 配置文件

    • pm2 save // 保存现有列表数据

    • pm2 startup //设置开机启动

结尾

Pm2 能做的还有很多,等待挖掘…

-------------本文结束 感谢您的阅读-------------
请我吃辣条吖~